home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / mac / files / dsp / dska_10.hqx / dska ƒ / autotest.asm next >
Assembly Source File  |  1994-08-07  |  11KB  |  276 lines

  1. ;-----------------------------------------------------------;
  2. ; DSK_SPEC.ASM                                              ;
  3. ; (C) 1992-93                                               ;
  4. ; Texas Instruments Inc.                                    ;
  5. ; By: Keith Larson                                          ;
  6. ;     TMS320Cxx DSP Applications                            ;
  7. ;                                                           ;
  8. ; Performs a self-test in native code and transmits RS232   ;
  9. ; messages back to the host                                 ;
  10. ;-----------------------------------------------------------;
  11. YES     .set    1
  12. NO      .set    0
  13. ;----------------------------------------------------------------
  14. BCMD            .set   0xFA10   ;JUMP CMD
  15. BXMIT           .set   0xFA12   ;JUMP XMIT
  16. BXMIT16         .set   0xFA14   ;JUMP XMIT16
  17. BRECV           .set   0xFA06   ;JUMP RECV
  18. BRECV16         .set   0xFA08   ;JUMP RECV16
  19. ;----------------------------------------------------------
  20. TA              .set    09h     ;TA =RA = 6h 0000110000011000
  21. RA              .set    09h     ;
  22. TAP             .set    01h     ;TAP=RAP= 1h 0000001000000101
  23. RAP             .set    01h     ;
  24. TB              .set   018h     ;TB =RB =13h 0001101000110110
  25. RB              .set   018h     ;
  26. CTRL            .set   000h     ;CONTROL= 0h 0000000000000011
  27. ;-----------------------------------------------------------
  28. TADDR           .set   0x67     ;
  29. CHAR            .set   0x68     ;
  30. STAT0           .set   0x69     ;
  31. STAT1           .set   0x6a     ;
  32. SCRATCH         .set   0x6b     ;
  33. ACCU_lo         .set   0x6c     ;
  34. CMEM            .set   0x6e     ;
  35. AD1             .set   0x70     ;
  36. AD2             .set   0x71     ;
  37. AD3             .set   0x72     ;
  38. ;----------------------------------------------------------------
  39.         .include "mmregs.inc"
  40.         .ps     0xFA0A          ; rewrite RINT and XINT
  41.         b       RINT            ;
  42. XINT:   ret                     ;
  43.         ret                     ;
  44. ;----------------------------------------------------------------
  45.         .ps     0xfAD0          ;
  46. RINT    sst1    STAT1
  47.         lst1    STAT1
  48.         eint
  49.         ret
  50. ;----------------------------------------------------------------
  51. AICLB   .set    00001011b       ;
  52.         .entry
  53.         ldpk    0               ;
  54. sendagn lrlk    AR7,RS232OK     ;
  55.         call    SendMSG         ;
  56.         rsxm                    ;
  57.         conf    1               ;
  58.         lark    AR5,0x60        ;start of B1 (data)
  59.         lark    AR6,0x1f        ;length of B1
  60.         call    CHKMEM          ;
  61.         lrlk    AR5,0x400       ;start of B1 (data)
  62.         lrlk    AR6,0x3FF       ;length of B1
  63.         call    CHKMEM          ;start of B3 (data) is in AR5
  64. ;------------------------------------------------------------------
  65. AIC_RST lack    0x80            ;
  66.         sach    DXR             ; clear the DXR
  67.         sacl    GREG            ;
  68.         lrlk    AR0,0xffff      ; Setup a read from global memory
  69.         larp    AR0             ;
  70.         rptk    31              ; pulse /BR low for 32 cycles
  71.         lt      *               ; resetting the AIC
  72.         ;-----------------------
  73.         lalk    RA,2            ; setup xA vals
  74.         adlk    TA,9            ;
  75.         call    AIC2nd          ;
  76.      call    LF              ;
  77.         ;-----------------------
  78.         lalk    RAP,2           ; setup xAP vals
  79.         adlk    TAP,9           ;
  80.         addk    1               ;
  81.         call    AIC2nd          ;
  82.      lrlk    AR7,AIC         ;
  83.      call    SendMSG         ;
  84.         ;-----------------------
  85.         lalk    RB,2            ; setup xB vals
  86.         adlk    TB,9            ;
  87.         addk    2               ;
  88.         call    AIC2nd          ;
  89.      call    LF              ;
  90.         ;-----------------------
  91.         lack    AICLB           ; Set up AIC control register
  92.         call    AIC2nd          ;
  93. ;--------------------------------
  94. ; Find loopback conversion slope
  95. ;--------------------------------
  96.         ssxm                    ; Endpoint
  97.         lalk    0x7000          ; Loopback +0.875%
  98.         call    L_BACK          ;
  99.         sacl    AD1             ;
  100.         lac     DXR             ; Loopback -0.875%
  101.         neg                     ;
  102.         call    L_BACK          ;
  103.         sacl    AD2             ;
  104.         zac                     ; Loopback +0.000%
  105.         call    L_BACK          ;
  106.         sacl    AD3             ;
  107.         ;------------------------
  108.     lac     AD1             ; Check 3 point linearity
  109.         add     AD2             ;
  110.         sfr                     ;
  111.         sub     AD3             ;
  112.     sacl    AD3
  113.     call    XMITHEX         ;
  114.     call    LF              ;
  115.  
  116.     lrlk    AR7,AIC         ;
  117.     call    SendMSG         ;
  118.  
  119.     lac     AD3
  120.     abs                     ;
  121.     subk    0x40            ; Max allowable error for 2^-10 linearity
  122.     blz     AICOK           ;
  123.         call    BAD             ;
  124.         b       sendagn         ;
  125. AICOK   call    OK              ;
  126.         b       sendagn         ;
  127. ;--------------------------------
  128. L_BACK  sacl    DXR             ;
  129.         call    XMITHEX         ;
  130.         lac     DRR             ;
  131.         call    XMITHEX         ;
  132.         call    LF              ;
  133.         ret                     ;
  134. ;===================================================================
  135. AIC2nd  ork     0xC000,2        ; ACC = 0x0003XXXX
  136.         lark    AR7,0x20        ;
  137.         sar     AR7,IMR         ; XINT=on RINT=off
  138.         sar     AR7,DXR         ; Clear DXR LSB's
  139.         idle                    ; XINT flag may already be set
  140.         sach    DXR             ; request AIC register XMIT
  141.         idle                    ;
  142.         sacl    DXR             ; send new register value
  143.         idle                    ;
  144.         sacl    DXR,2           ; clear LSB's
  145.         lack    0x10            ;
  146.         sacl    IMR             ; XINT=off RINT=on
  147.         ret
  148. ;-------------------------------------------
  149. ;CHKMEM ARx=start data address  ARy=length
  150. ;-------------------------------------------
  151. CHKMEM  lrlk    AR7,MEM         ;
  152.         call    SendMSG         ;send message to host 'Checking mem @'
  153.         call    PRT_AR5         ;
  154.         ;----------------------------------
  155. CHKMEM2 larp    AR5             ;
  156.         lac     *               ;get DATA
  157.         xork    0x5555          ;DATA ^ BITMASK1
  158.         sacl    *               ;
  159.         xor     *               ;
  160.         bnz     BADMEM          ;OK?
  161.         lac     *               ;
  162.         xork    0x5555          ;(DATA ^ BITMASK1)^BITMASK1 = DATA
  163.         sacl    *               ;restore original DATA
  164.         xork    0xAAAA          ;DATA ^ BITMASK2
  165.         sacl    *               ;
  166.         xor     *               ;
  167.         bnz     BADMEM          ;OK?
  168.         lac     *               ;
  169.         xork    0xAAAA          ;(DATA ^ BITMASK2)^BITMASK2 = DATA
  170.         sacl    *+              ;restore original DATA
  171.         ;------------------------
  172. MEMOK   call WIDGET             ; Special FX, toggle <,> characters
  173.         ;------------------------
  174.         larp    AR6             ;
  175.         banz    CHKMEM2,*-      ;Check next location
  176.         call    PRT_AR5         ;
  177.         call    OK              ;
  178.         ret                     ;
  179.         ;------------------------
  180. BADMEM  call    PRT_AR5,*+      ;
  181.         call    BAD             ;
  182.         larp    AR6             ;
  183.         banz    CHKMEM2,*-      ;Check next location
  184.         ret                     ;
  185. ;==================================================================
  186. ; RS232 MESSAGING ROUTINES
  187. ;==================================================================
  188. WIDGET  lalk    0x083C          ;< with bs
  189.         sar     AR5,TADDR       ;
  190.         bit     TADDR,15        ;toggle slash for special effect!
  191.         bbz     FSLASH          ;
  192.         lalk    0x083E          ;> with bs
  193. FSLASH  call    BXMIT16         ;
  194.         ret                     ;
  195. ;--------------------------------
  196. PRT_AR5 sar     AR5,ACCU_lo     ;
  197.         lac     ACCU_lo         ;
  198. ;       call    XMITHEX         ;
  199. ;       ret                     ;
  200. ;--------------------------------
  201. XMITHEX sacl    ACCU_lo         ;
  202.         sacl    SCRATCH         ;
  203.         lalk    0x7830          ; xmit '0x' via RS232
  204.         call    BXMIT16         ;
  205.         lark    AR4,3           ; shift upper char to ACCU_hi
  206. XMITHX2 lac     SCRATCH,4       ;
  207.         sacl    SCRATCH         ; save lower 3 chars
  208.         sach    CHAR            ; save upper 1 char
  209.         lac     CHAR            ; load char
  210.         andk    0xF             ; Convert 0-9 and A-F to ASCII
  211.         subk    10              ;
  212.         blz     LT_A            ;
  213.         addk    7               ;
  214. LT_A    addk    0x3A ; 57       ;
  215.         call    BXMIT           ; xmit the ASCII character
  216.         larp    AR4             ;
  217.         banz    XMITHX2,*-      ; next char?
  218.         lalk    0x2020          ; SP/SP
  219.         call    BXMIT16         ;
  220.         lac     ACCU_lo         ;
  221.         ret                     ;
  222. ;--------------------------------
  223. BAD     lrlk    AR7,BAD_MSG     ;
  224.         call    SendMSG         ;
  225.         call    HENTER          ;
  226.         ret                     ;
  227. ;--------------------------------
  228. OK      lrlk    AR7,OK_MSG      ;
  229.         call    SendMSG         ;
  230. ;--------------------------------
  231. HENTER  lrlk    AR7,ENTER       ;
  232.         call    SendMSG         ;
  233.         ret                     ;
  234. ;--------------------------------
  235. LF      sacl    ACCU_lo         ;
  236.         lack    0xA             ;
  237.         call    BXMIT           ;
  238.         lac     ACCU_lo         ;
  239.         ret                     ;
  240. ;--------------------------------
  241. SendMSG dint                    ;
  242.         sar     AR7,TADDR       ;
  243.         lac     TADDR           ;
  244.         tblr    CHAR            ; swap bytes for xmit
  245.         lac     CHAR            ;
  246.         rptk    7               ; send MSB's
  247.         sfr                     ;
  248.         call    s_char          ;
  249.         lac     CHAR            ; send LSB's
  250.         call    s_char          ;
  251.         larp    AR7             ;
  252.         b       SendMSG,*+      ;
  253.         ;------------------------
  254. s_char  andk    0xff            ; if 0 terminate after sending
  255.         subk    0xff            ; if 0xff terminate NO send
  256.     bz      POP_RET         ;
  257.     addk    0xff            ;
  258.     bnz     VCHAR           ;
  259.     popd    TADDR           ; If 0 pop TOS for smaller code size!
  260. VCHAR   call    BXMIT           ; transmit char
  261.     ret                     ;
  262. POP_RET pop                     ;
  263.     ret                     ;
  264. ;----------------------------------------------------------------
  265. ;RS232OK         .string 0x1b,"[2JDSK-RS232 Loop",9,9," OK"
  266. ;----------------------------------------------------------------
  267. RS232OK         .string      "\fDSK-RS232 Loop\t\t\tOK"
  268. ENTER           .string      "\t>enter<",0
  269. AIC             .string      0xA,"AIC Loopback :",-1
  270. MEM             .string      0xA,"C26 MEM Check:",-1
  271. OK_MSG          .string      "\tOK",-1
  272. BAD_MSG         .string      "\tBAD\a",-1
  273. ;----------------------------------------------------------------
  274.         .end
  275.  
  276.